package com.itheima.StudyManageSys;

import java.util.ArrayList;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        //创建集合
        ArrayList<Student> list = new ArrayList<>();

        //初始化
        loop:while (true) {     //将这个循环命名为loop
            System.out.println("----------------------欢迎来到学生管理系统----------------------");
            System.out.println("1. 添加学生");
            System.out.println("2. 删除学生");
            System.out.println("3. 修改学生");
            System.out.println("4. 查询学生");
            System.out.println("5. 退出");
            System.out.println("请输入您的选择:");

            Scanner sc = new Scanner(System.in);
            switch(sc.next()){      //用nectInt可以,但用户可能输错,所以用next容错率高,可以走default
                case "1" -> AddStudent(list);       //用->形式可以省区break
                case "2" -> DelStudent(list);
                case "3" -> UpdateStudent(list);
                case "4" -> QueryStudent(list);
                case "5" -> {
                    System.out.println("退出");
                    break loop;     //单独的break只能跳出switch. 命名后可指定跳出叫loop的循环
                    //System.exit(0);   停止虚拟机运行:也可以这么跳出循环
                }
                default -> System.out.println("输入错误,请重新输入");
            }
        }

    }

    //添加学生(id不可重复)
    public static void AddStudent(ArrayList<Student> list){
        Scanner sc = new Scanner(System.in);
        Student s = new Student();

        while(true){
            System.out.println("请输入学生的id");
            String id = sc.next();
            //判断id是否存在
            boolean flag = contains(list, id);
            if(flag){
                //表示id已经存在,需要重新录入
                System.out.println("id已经存在,需要重新录入");
            }else{
                //表示id不存在,可以继续使用
                s.setId(id);
                break;
            }
        }
        System.out.println("请输入学生的姓名:");
        s.setName(sc.next());
        System.out.println("请输入学生的年龄:");
        s.setAge(sc.nextInt());
        System.out.println("请输入学生的家庭地址");
        s.setAddress(sc.next());

        list.add(s);
        System.out.println("添加成功");
    }

    //删除学生(根据id删除)
    public static void DelStudent(ArrayList<Student> list){
        System.out.println("请输入要删除的学生id");
        Scanner sc = new Scanner(System.in);
        String id = sc.next();
        //查询id在集合中的索引
        int index = getIndex(list, id);
        //对index进行判断
        if(index>=0){
            //存在,通过索引删除
            list.remove(index);
        }else{
            System.out.println("id不存在,删除失败");
        }
    }

    //修改学生
    public static void UpdateStudent(ArrayList<Student> list){
        System.out.println("请输入要修改的学生id");
        Scanner sc = new Scanner(System.in);
        String id = sc.next();

        int index = getIndex(list, id);
        if(index == -1){
            System.out.println("要修改的id不存在,请重新输入");
            return;
        }

        //当代码执行到这里,表明当前id是存在的
        //获取要修改的学生对象
        Student s = list.get(index);

        //输入其他信息去修改
        System.out.println("请输入要修改的学生姓名");
        s.setName(sc.next());
        System.out.println("请输入要修改的学生年龄");
        s.setAge(sc.nextInt());
        System.out.println("请输入要修改的学生家庭地址");
        s.setAddress(sc.next());
        System.out.println("修改成功!");
    }

    //查询学生
    public static void QueryStudent(ArrayList<Student> list){
        if(list.size()==0){
            System.out.println("当前无学生信息,请添加后再查询");
            return;
        }

        System.out.println("请输入要查询的学生id:");
        Scanner sc = new Scanner(System.in);

        //打印表头信息
        System.out.println("id\t\t姓名\t\t年龄\t\t家庭地址");

        //运行到这时,说明集合里是有数据的
        for (int i = 0; i < list.size(); i++) {
            Student s = list.get(i);
            System.out.println(s.getId() + "\t\t" + s.getName() + "\t\t" + s.getAge() + "\t\t" + s.getAddress());
        }
    }

    //判断id在集合中是否存在
    public static boolean contains(ArrayList<Student> list,String id){
        return getIndex(list,id) >= 0;      //只有-1才是不存在,返回false
    }

    //通过id获得索引
    public static int getIndex(ArrayList<Student> list,String id){
        for (int i = 0; i < list.size(); i++) {
            //得到每一个学生对象
            Student stu = list.get(i);
            //得到每一个学生对象的id
            String sid = stu.getId();
            if(sid.equals(id)){     //拿每一个学生的id和要查询的id相比
                return i;
            }
        }
        return -1;
    }

}
